const messageModel = require('../models/messageModel')
const deleteAttachment = require("../utils/DeleteAttachment");

const getMsg = (req, res) => {
    let {chat_id, msgOffset} = req.query
    msgOffset = parseInt(msgOffset) * 25

    console.log(chat_id, msgOffset)
    messageModel.getMsgById(chat_id, msgOffset).then(rs => {
        return res.status(200).send(rs).end()
    }).catch(err => {
        return res.status(500).send(err).end()
    })

}

const getVoiceMsg = (req, res) => {
    const room_number = req.query.roomNumber
    const msg_id = req.query.msgId

    messageModel.getVoiceById(room_number, msg_id).then(rs => {
        return res.set( {'Content-Type': 'audio/webm'} ).status(200).send(rs).end()
    }).catch(err => {
        return res.status(500).send(err).end()
    })
}

const insertMsg = async (req, res) => {

    const {chat_id, sender_id, text, send_time} = req.body
    console.table(req.body)
    const rs = await messageModel.createMsg(chat_id, sender_id, text, send_time)


    const [obj] = rs
    if (obj.last_id) {
        if(req.files.length !== 0) {
            const files = req.files
            for (const item of files) {
                await messageModel.createAttachments(
                    obj.last_id,
                    item.path,
                    item.filename,
                    item.size,
                    item.mimetype,
                )
            }
            const [attachmentsInfo] = await messageModel.getAttachmentsByMsgId(obj.last_id)
            return res.status(200).send({last_id: obj.last_id, filenames: attachmentsInfo.filenames, mimeType: attachmentsInfo.mimeType}).end()
        }
        return res.status(200).send({last_id: obj.last_id})
    } else {
        return res.status(500).send({msg:'发送消息失败'})
    }
}

const updateMsg = (req, res) => {
    const {content, msgId} = req.body
    messageModel.updateMsgByMsgId(content, msgId).then(rs=>{
        res.status(200).send(rs)
    }).catch(err=>{
        console.error(err)
        res.status(500).send({msg: '更新消息出错，稍后再试'})
    })
}

const deleteMsg = async (req, res) => {
    const {msgId} = req.body
    const fileURls = await messageModel.getAttachmentsUrlByMsgId(msgId)
    messageModel.deleteMsgById(msgId).then(rs=> {
        res.status(200).send(rs)
        deleteAttachment(fileURls)
    }).catch(err=>{
        console.error(err)
        return res.status(500).send({msg: '删除失败，稍后再试'})
    })
}

const getDmOppUser = (req, res) => {
    const {conId, uid} = req.query
    messageModel.getDmOppUserByConId(conId, uid)
        .then(rs => res.status(200).send(rs))
        .catch(err => {
            console.error(err)
            return res.status(500).send({msg: '获取资料失败，稍后再试'})
        })
}

module.exports = {
    insertMsg,
    getMsg,
    getVoiceMsg,
    updateMsg,
    deleteMsg,
    getDmOppUser
}

